#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

#include <functional>
#include <vector>

using func_t = std::function<void()>;
int gcount = 0;
std::vector<func_t> funcs;

void handle(int){
    for(func_t &f:funcs){
        f();
    }
    alarm(2);
}


int main()
{

    // 当信号换成硬件中断 那么就是操作系统的运行原理
    funcs.emplace_back([]()
                       { std::cout << "我是内核刷新操作" << std::endl; });
    funcs.emplace_back([]()
                       { std::cout << "我是进程切换操作（时间片到了" << std::endl; });
    funcs.emplace_back([]()
                       { std::cout << "我是内存管理操作，定期清理内存" << std::endl; });

    alarm(2);
    signal(SIGALRM, handle);
    
    //wait a signal
    while(true){
        pause();
        std::cout << "i'm awake" << std::endl;
    }

    // while (true)
    //     gcount++;
    return 0;
}
